<?php
namespace shenka\controllers\classes;

use yii\db\Query;
/**
 * 查询类库
 */
class QueryClass {

	/**
	 * 按小时统计结果处理
	 * @param  object $model     对象
	 * @param  string $fieldname 字段名
	 * @param  string $time      日期
	 * @return json            [description]
	 */
	public static function _getHoursData($model,$fieldname,$time) {
		$date = date('Y-m-d',strtotime($time));
		$i = 0;
		for($i; $i<24; $i++)
		{
			$ob = $model->find()->where(["from_unixtime($fieldname,'%Y-%m-%d')"=>$date,"from_unixtime($fieldname,'%k')"=>$i]);
			
			$re[] = (int)$ob->count();
		}
		$data = json_encode($re);

		return $data;
	}

	/**
	 * 按日、年统计结果处理
	 * @param  string  $fieldName 字段名
	 * @param  string  $formatter 时间日期格式
	 * @param  string  $tableName 表名
	 * @param  integer $limit     返回记录条数
	 * @return json             [description]
	 */
	public static function dataJson($fieldName,$formatter,$tableName,$where=[],$limit = 15) {
		$query = self::_getData($fieldName,$formatter,$tableName,$where,$limit);
		foreach($query as $k){
			$count[] = (int)$k['count'];
			$date[] = $k['date'];
		}
		$re = ['count'=>array_reverse($count),'date'=>array_reverse($date)];
		$data = json_encode($re);

		return $data;
	}

	/**
	 * 按周统计结果处理
	 * @param  string  $fieldName 字段名
	 * @param  string  $formatter 时间日期格式
	 * @param  string  $tableName 表名
	 * @param  integer $limit     返回记录条数
	 * @return json             [description]
	 */
	public static function weekJson($fieldName,$formatter,$tableName,$limit = 15) {
		$query = self::_getData($fieldName,$formatter,$tableName,$limit);
		foreach($query as $k){
			$count[] = (int)$k['count'];
			$form = explode('-',$k['date']);
			$date[] = $form['0'] . '年第' . $form['1'] . '周';
		}
		$re = ['count'=>array_reverse($count),'date'=>array_reverse($date)];
		$data = json_encode($re);

		return $data;
	}

	// // xin 数据库操作

 //    /**
 //     * 按条件查询总数
 //     * @param  string $tableName 表名
 //     * @param  array  $where     查询条件
 //     * @return [type]            [description]
 //     */
 //    public static function _getConditionData($tableName,$where=[],$andwhere=[]){
 //    	$model = new Query;
 //    	$result = $model->select("count(id)")->from($tableName)->where($where)->andWhere($andwhere)->all();
 //    	$data = $result[0]["count(id)"];
    	
 //    	return $data;
 //    }

 //    *
 //     * 按条件分组查询各组总数
 //     * @param  string $tableName 表名
 //     * @param  array  $where     查询条件
 //     * @return [type]            [description]
     
 //    public static function _getGroupData($tableName,$field='',$where=[],$andwhere=[],$group=[]){
 //    	$model = new Query;
 //    	$result = $model->select(["count(id) as count",$field])->from($tableName)->where($where)->andWhere($andwhere)->groupBy($group)->all();
 //    	$data = [];
 //    	foreach($result as $k){
 //    		$data[$k[$field]] = $k['count'];
 //    	}
 //    	//var_dump($data['']);exit;
 //    	return $data;
 //    }

	/**
	 * 根据日期条件获得查询结果
	 * @param  string  $fieldName 字段名
	 * @param  string  $formatter 时间日期格式
	 * @param  string  $tableName 表名
	 * @param  integer $limit     返回记录条数
	 * @return array             [description]
	 */
	private static function _getData($fieldName,$formatter,$tableName,$where=[],$limit = 15){
		$model = new Query;
		$re = $model->select(["from_unixtime($fieldName,'$formatter') as date",'count(id) as count'])->from($tableName)->where($where)->groupBy(["from_unixtime($fieldName,'$formatter')"])->orderBy(['date'=>SORT_DESC])->limit($limit)->all();

		return $re;
	}

	// xin  按分组查询的结果获取各组总数
    //     * @param  string $group 分组查询的数组
    //     * @param  array  $groupName     分组名称
	public static function getGroupCount($group,$groupName){

		$data = [];
		foreach($group as $k){
    		$data[$k["$groupName"]] = $k['count'];
    	}
    	return $data;
	}

}